import router from '@/router'
import store from '@/store'
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  NProgress.start()
  if (store.getters.token) {
    // console.log('现在是去' + to.path)
    if (to.path === '/login') {
      next('/')
    } else {
      if (!store.getters.userId) {
        // 如果没有id这个值 才会调用 vuex的获取资料的action
        const { roles } = await store.dispatch('user/getUserInfo')
        // 为什么要写await 因为我们想获取完资料再去放行
        // 这一步是为了 用拿到的数据去匹配动态路由，menu里面有的才能给这个用户加进去  进去之后才能看到对应的菜单
        // roles.menus.push('permissions')
        // 手动改成静态 路由
        roles.menus = ['approvals', 'attendances', 'departments', 'employees', 'permissions', 'salarys', 'settings', 'social_securitys', 'users']
        const routes = await store.dispatch('permission/filterRoutes', roles.menus)

        // 拿到的这个routes  再给router加上去，加到路由表，让它有访问对应路由的权限
        router.addRoutes([...routes, { path: '*', redirect: '/404', hidden: true }])
        next(to.path)
      } else {
        next()
        // console.log('现在是有token，直接放行')
      }
    }
  } else {
    // debugger
    if (whiteList.indexOf(to.path) > -1) {
      // console.log('现在去' + to.path)
      // console.log('没有token但是在白名单的path')
      next()
    } else {
      // console.log('现在去' + to.path)
      // console.log('没有token，也不再白名单，强制跳转/login')
      next('/login')
    }
  }
  NProgress.done()
})

// 后置守卫
router.afterEach(() => {
  NProgress.done()
})
